﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace AbcCorp.OrderService
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IOrderService
    {
        [FaultContract(typeof(Order))]
        [OperationContract]
        Order GetOrder(int orderid);

        [FaultContract(typeof(Order))]
        [OperationContract]
        IList<Order> GetOrders();

        [FaultContract(typeof(Order))]
        [OperationContract]
        bool AddOrder(Order newOrder);

        [FaultContract(typeof (Order))]
        [OperationContract]
        bool UpdateOrder(int id, bool status);

        [FaultContract(typeof(PaymentMethod))]
        [OperationContract]
        IList<PaymentMethod> GetMethods();

        [FaultContract(typeof(Order))]
        [OperationContract]
        IList<Order> GetOrderDetailsOfCustomer(int customerid);
    }

    // Use a data contract as illustrated in the sample below to add composite types to service operations
    [DataContract]
    public class Order
    {
        /// <summary>
        /// Mã đơn đặt hàng
        /// </summary>
        [DataMember]
        public int OrderID { get; set; }

        /// <summary>
        /// Đối tượng phương thức thanh toán
        /// </summary>
        [DataMember]
        public int PaymentMethodID { get; set; }

        /// <summary>
        /// Đối tượng account
        /// </summary>
        [DataMember]
        public int AccountID { get; set; }

        /// <summary>
        /// Đối tượng product
        /// </summary>
        [DataMember]
        public int ProductID { get; set; }

        /// <summary>
        /// Mã thẻ tín dụng (nếu sử dụng hình thức thanh toán là thẻ tín dụng)
        /// </summary>
        [DataMember]
        public string CreditCardNumber { get; set; }

        /// <summary>
        /// Ngày đặt hàng
        /// </summary>
        [DataMember]
        public DateTime OrderDate { get; set; }

        /// <summary>
        /// Ngày hết hạn thanh toán
        /// </summary>
        [DataMember]
        public DateTime OrderExp { get; set; }

        /// <summary>
        /// Trạng thái đơn hàng (thanh toán hay chưa)
        /// </summary>
        [DataMember]
        public bool Status { get; set; }

        /// <summary>
        /// Địa chỉ người dùng muốn nhập hàng 
        /// (trường hợp người dùng không muốn sử dụng địa chỉ đã đãng ký thông tin) 
        /// </summary>
        [DataMember]
        public string NewAddress { get; set; }

        /// <summary>
        /// Tong tien
        /// </summary>
       
        [DataMember]
        public decimal Total { get; set; }

        /// <summary>
        /// So luong san pham
        /// </summary>
        [DataMember]
        public int Quantity { get; set; }

    }

    [DataContract]
    public class PaymentMethod
    {
        [DataMember]
        public int MethodID { get; set; }

        [DataMember]
        public string MethodName { get; set; }
    }
}
